2010-11-18 3 views
1

Jemand hat mir gesagt, einen Weg auf eine JFrame zu malen und es funktionierte in dem Beispiel in Ordnung, aber jetzt habe ich Tabs es malt nicht auf sie ....drawLine nicht auf JTabbedPane Zeichnung (Java)

Sorry für die blurge von aufgeblähtem Code, aber ich brauche die Farbe/drawLine in meinem Tabbed Beispiel ...

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import java.io.*; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Line2D; 


public class GUI extends JTabbedPane implements ActionListener 
{ 
    static JFrame aWindow = new JFrame("Project"); 

    JTabbedPane myTabs = new JTabbedPane(); 

    JPanel loginMainPanel = new JPanel(); 
    JPanel displayMainPanel = new JPanel(); 
    JPanel editMainPanel = new JPanel(); 

    JTextField myText1 = new JTextField(""); 
    JTextField myText2 = new JTextField(""); 
    JTextField myText3 = new JTextField(""); 

    JLabel loginLabel = new JLabel("Username:"); 

    JTextField loginField = new JTextField(); 
    JLabel loginLabel2 = new JLabel("Password:"); 
    JPasswordField loginPass = new JPasswordField(); 

    JButton displayButton = new JButton("Load Data"); 
    JButton loginButton = new JButton("Login"); 

    JLabel editLabel = new JLabel("Write:"); 
    JTextArea editArea = new JTextArea(); 

    public GUI() 
    { 
     Toolkit theKit = aWindow.getToolkit(); 
     Dimension wndSize = theKit.getScreenSize(); 

     aWindow.setBounds(wndSize.width/3, wndSize.height/3, 250, 250); 
     aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     GridLayout grid = new GridLayout(1,1); 
     Container content = aWindow.getContentPane(); 
     content.setLayout(grid); 

     createLoginPanel(); 
     createDisplayPanel(); 
     createEditPanel(); 

     myTabs.addTab("Login", loginMainPanel); 
     myTabs.addTab("Main Menu", displayMainPanel); 
     myTabs.addTab("Setting", editMainPanel); 

     myTabs.setSelectedIndex(0); 
     myTabs.setEnabledAt(1,false); 
     myTabs.setEnabledAt(2,false); 

     content.add(myTabs); 
     aWindow.setVisible(true); 
    } 

    public void createLoginPanel() 
    { 
     loginMainPanel.setLayout(null); 
     loginLabel.setBounds(10, 15, 150, 20); 
     loginMainPanel.add(loginLabel); 
     loginField.setBounds(10, 35, 150, 20); 
     loginMainPanel.add(loginField); 
     loginLabel2.setBounds(10, 60, 150, 20); 
     loginMainPanel.add(loginLabel2); 
     loginPass.setBounds(10, 80, 150, 20); 
     loginMainPanel.add(loginPass); 
     loginButton.addActionListener(this); 
     loginButton.setBounds(50, 110, 80, 20); 
     loginMainPanel.add(loginButton); 
    } 

    public void createDisplayPanel() 
    { 
     displayMainPanel.setLayout(null); 
     displayButton.addActionListener(this); 
     displayButton.setBounds(50, 80, 150, 20); 
     displayMainPanel.add(displayButton); 
     myText1.setBounds(50, 170, 200, 30); 
     myText2.setBounds(50, 140, 200, 30); 
     myText3.setBounds(50, 110, 200, 30); 
     displayMainPanel.add(myText1); 
     displayMainPanel.add(myText2); 
     displayMainPanel.add(myText3); 
    } 

    public void createEditPanel() 
    { 
     editMainPanel.setLayout(null);  
     editLabel.setBounds(10, 15, 150, 20); 
     editMainPanel.add(editLabel); 
     editArea.setBounds(10, 65, 150, 50); 
     editMainPanel.add(editArea);   
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     if (e.getSource() == loginButton) 
     { 
      //myTabs.setSelectedIndex(1); 
     } 
    } 

    public void paint(Graphics g) { 
     super.paint(g); 
     int locX = 0; 
     int locY = 0; 
    int destX = 210; 
    int destY = 210; 
    g.setColor(Color.red); 
     // draw a line (there is now drawPoint..) 
     g.drawLine(locX, locY, destX, destY); 
    } 


    public static void main(String[] args) 
    { 
     GUI tw1 = new GUI(); 

    } 
} 

jemand arbeiten kann findet das Problem/bietet eine Lösung, damit es diese Zeile auf dem Registerkarte malen wird (loginMainPanel)

Thanks a lot,

Antwort

1

Wenn Sie benutzerdefinierte auf einem JPanel zeichnen möchten, sollten Sie eine benutzerdefinierte Klasse erstellen, die sich JPanel:

woudl werden

JPanel loginMainPanel = new JPanel(); 
:

class CustomPanel extends JPanel { 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawLine(x1, y1, x2, y2); 
    } 
} 

Dann

JPanel loginMainPanel = new CustomPanel(); 
+0

Ok vielen Dank, vielleicht wissen Sie, wie ich es über die/irgendwelche Textfelder/Schaltflächen usw. setzen würde? Vielen Dank. –

+0

Auch wenn ich später im Programm .drawLine (verschiedene Co-Orden) wollte Wie würde ich diese geschützte Lücke nennen? e.g in/auf einen Knopf klicken –

+0

@James, Sie sollten wahrscheinlich nicht benutzerdefinierte Zeichnung auf Panels mit einem 'LayoutManager' Layout Komponenten zu mischen. Für Ihre erste Frage, was Sie tun möchten, legen Sie Ihre Komponenten auf einer separaten JPanel, die Sie unter dem JPanel platzieren, auf dem Sie zeichnen. – jjnguy

1

Sorry für die blurge von aufgeblähtem Code

Ja, auch das ist, warum die Leute Probleme nicht lösen können, weil der Code so aufgebläht ist, können Sie nicht sehen, was Sie tun.

Wenn Sie uns wünschen Sie Problem lösen helfen, dann müssen Sie eine mir SSCCE

Jemand schreiben, einen Weg gesagt auf eine JFrame

Nun zu malen, das ist falsch, im Allgemeinen Sie sollten die paint() -Methode nicht überschreiben, es sei denn, Sie haben einen bestimmten Grund.

Auch Ihr gesamtes Programm ist falsch, weil Sie JTabbedPane erweitern. Sie sollten dies nie tun, um eine GUI zu erstellen.

Ihre paint() -Methode wird nie aufgerufen, weil Sie diese Klasse nie irgendwo verwenden. Schau dir deinen Code an. Für Ihre Klassenvariablen erstellen Sie ein neues JTabbedPane. Dann fügen Sie im Konstruktor alle diese Komponenten zum Rahmen hinzu und machen den Rahmen sichtbar.

Sie müssen sich die Swing tutorial ansehen und einige Beispiele für eine bessere Möglichkeit zum Erstellen einer einfachen GUI folgen.

Ich verstehe nicht, was Sie versuchen, indem Sie eine Linie auf dem Registerkartenbereich zeichnen. Ein Registerkartenbereich zeigt bei jedem Klick auf einen Tab verschiedene Bereiche an. Wo genau soll die Linie erscheinen?

Auch sollten Sie lernen, wie Sie Layout-Manager verwenden. Wenn Sie ein Null-Layout verwenden, treten unnötige Probleme auf.

Bis Sie eine SSCCE veröffentlichen, kann ich nicht viel helfen.

+0

Ich möchte nur eine Zeile visuell auf dem Login-Tab/Panel/Fenster/Fenster/Sache erscheinen. –