2010-11-18 23 views
1

有人告訴我一個方法來繪製到一個JFrame,並在代碼工作正常,但現在我有標籤不畫到他們....drawLine沒有圖紙到JTabbedPane中(Java)的

對不起,臃腫的代碼blurge但我需要油漆/的drawLine在我的選項卡式實例工作...

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(); 

    } 
} 

任何人都可以找到問題/提供了一個解決方案,因此它會畫畫的標籤在該行(loginMainPanel )?

非常感謝,

回答

1

如果你想定製上一個JPanel繪製,您應該創建一個擴展JPanel自定義類:

class CustomPanel extends JPanel { 

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

然後:

JPanel loginMainPanel = new JPanel(); 

Woudl成爲:

JPanel loginMainPanel = new CustomPanel(); 
+0

好的非常感謝,無論如何,你知道我會怎麼把它放在/任何文本框/按鈕框等?謝謝。 – 2010-11-19 09:17:02

+0

另外,如果我想在程序中稍後提出(不同的合作伙伴),我會如何稱此保護虛擬?即g在/按鈕上單擊 – 2010-11-19 10:07:38

+0

@James,您應該不會在面板上混合使用「LayoutManager」佈局組件的自定義繪圖。對於你的第一個問題,你想要做的是將你的組件放在一個單獨的JPanel上,並將它放在你正在繪製的JPanel下面。 – jjnguy 2010-11-19 14:31:09

1

對不起,臃腫的代碼blurge

是啊,這就是爲什麼人們解決不了問題,因爲代碼是那麼臃腫,你不能看到你在做什麼。

如果您希望我們幫你解決問題,那麼你需要發佈SSCCE

有人告訴我一個方法來繪製到一個JFrame

嗯,這是錯誤的,在一般情況除非你有特定的原因,否則你不應該覆蓋paint()方法。

此外,您的整個程序是錯誤的,因爲您正在擴展JTabbedPane。你不應該這樣做來創建一個GUI。

您的paint()方法從不調用,因爲您從不在任何地方使用該類。看看你的代碼。對於你的類變量,你創建一個新的JTabbedPane。然後在構造函數中將所有這些組件添加到框架並使框架可見。

您需要看看Swing tutorial並按照一些示例來創建一個簡單的GUI。

我不明白你想通過在選項卡式窗格上畫一條線來做什麼。每次單擊選項卡時,選項卡式窗格都會顯示不同的面板。你究竟想要哪條線出現?

此外,您應該學習如何使用佈局管理器。使用空佈局會導致不必要的問題。

在發佈SSCCE之前,我無法提供太多幫助。

+0

我只想讓一行顯示在登錄選項卡/面板/窗格/窗口/東西上。 – 2010-11-19 09:09:53