.drawLine не рисует на JTabbedPane (Java) - PullRequest
1 голос
/ 19 ноября 2010

Кто-то сказал мне, как рисовать на Jframe, и в этом примере все работало нормально, но теперь у меня есть вкладки, которые не рисуют на них ...

Извините за размытость раздутого кода, но мне нужно, чтобы 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)?

Большое спасибо,

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Извините за размытость раздутого кода

Да, именно поэтому люди не могут решать проблемы, потому что код настолько раздут, что вы не видите, что делаете.

Если вы хотите, чтобы мы помогли вам решить проблему, вы должны опубликовать SSCCE

Кто-то сказал мне способ рисовать на Jframe

Ну, это неправильно, в общем случае вы не должны переопределять метод paint (), если у вас нет конкретной причины.

Кроме того, вся ваша программа неверна, поскольку вы расширяете JTabbedPane.Вы никогда не должны делать это, чтобы создать графический интерфейс.

Ваш метод paint () никогда не вызывается, потому что вы никогда нигде не используете этот класс.Посмотри на свой код.Для ваших переменных класса вы создаете новый JTabbedPane.Затем в конструкторе вы добавляете все эти компоненты в рамку и делаете рамку видимой.

Вам нужно взглянуть на Swing tutorial и следовать некоторым из примеров там для лучшегоспособ создания простого графического интерфейса.

Я не понимаю, что вы пытаетесь сделать, рисуя линию на панели с вкладками.Панель с вкладками отображает разные панели каждый раз, когда вы нажимаете на вкладку.Где именно вы хотите, чтобы линия отображалась?

Также вы должны научиться пользоваться менеджерами компоновки.Использование нулевого макета приведет к ненужным проблемам.

Пока вы не опубликуете SSCCE, я не могу вам помочь.

1 голос
/ 19 ноября 2010

Если вы хотите создать собственный рисунок на 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...