有人告诉我一种在Jframe上绘画的方法,并且在示例中效果很好,但是现在有了选项卡,它无法在它们上绘画...

抱歉,code肿的代码模糊不清,但我需要“ paint / 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)上?

非常感谢,

最佳答案

如果要在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();

09-04 13:16
查看更多