Форму не показывает после isVisible() называется, без ошибок

Я создаю простой калькулятор для моей CS класс, я закончил всю математику, и я пытаюсь отформатировать свою форму, я сделал фон панели, добавлен boxlayout В, а затем добавил еще 3 панели, а затем добавил фон панели в JFrame, однако после внесения изменений в форму не открывает. Может кто-нибудь помочь мне выяснить, что я делаю неправильно?

public class Calculator implements ActionListener
{

    private JFrame myFrame;
    private JPanel buttonPanel;
    private JPanel resultPanel;
    private JPanel textPanel;
    public JPanel mainPanel;
    private JButton ADD;
    private JButton SUB;
    private JButton MULT;
    private JButton DIV;
    private JLabel resultLabel;
    private JTextField text1;
    private JTextField text2;

    public Calculator()
    {
        // Frame to contain panels
        int fx = 550;
        int fy = 300;
        myFrame = new JFrame("The Shittiest Calculator");
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setSize(fx, fy);
        myFrame.setResizable(false);

        // Buttons to add to the buttonPanel
        ADD = new JButton("ADD");
        SUB = new JButton("SUBTRACT");
        MULT = new JButton("MULTIPLY");
        DIV = new JButton("DIVIDE");
        ADD.setName("addButton");
        SUB.setName("subButton");
        MULT.setName("multButton");
        DIV.setName("divButton");
        int x = 50;
        int y = 25;
        ADD.setSize(x, y);
        SUB.setSize(x, y);
        MULT.setSize(x, y);
        DIV.setSize(x, y);
        ADD.addActionListener(this);
        SUB.addActionListener(this);
        MULT.addActionListener(this);
        DIV.addActionListener(this);

        // Button Panel
        buttonPanel = new JPanel();
        buttonPanel.add(ADD);
        buttonPanel.add(SUB);
        buttonPanel.add(MULT);
        buttonPanel.add(DIV);

        // Result label
        resultLabel = new JLabel("Result = ");
        resultLabel.isVisible();

        // Result Panel
        resultPanel = new JPanel();
        resultPanel.isVisible();
        resultPanel.add(resultLabel);

        // Textfields
        text1 = new JTextField();
        text2 = new JTextField();
        text1.setName("leftOperand");
        text2.setName("rightOperand");
        text1.setColumns(10);
        text2.setColumns(10);

        // Textfield panel
        textPanel = new JPanel();
        textPanel.add(text1);
        textPanel.add(text2);

        //background Panel;
        mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        mainPanel.add(textPanel);
        mainPanel.add(resultPanel);
        mainPanel.add(buttonPanel);

        //Frame start
        myFrame.add(mainPanel);
        myFrame.isVisible();

    }

    /**
     * 
     * @return this.myFrame returns the frame.
     */
    public JFrame getFrame()
    {
        return this.myFrame;
    }

    /**
     * 
     * @param args main method 
     */
    public static void main(String[] args)
    {
        Calculator calc = new Calculator();
    }
-1
2019-09-18 01:58:06
источник
1 ответ

Моя родная решением будет поместить каждую textctrl за свои собственные панели, которые могут быть окрашены. Это создаст иллюзию границы вокруг каждого textctrl. Вот пример:

import wx, traceback

# sets the width of the highlight border
HIGHLIGHT_WIDTH = 2
HIGHLIGHT_COLOR = (255, 0, 0)


class Mainframe(wx.Frame):

    def __init__(self, parent=None):
        self.bg_color = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENU)
        self.highligt_color = wx.Colour(HIGHLIGHT_COLOR)

        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Highlight TextCtrl Test", size=wx.Size(500, 300),
                          style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
        self.SetBackgroundColour(self.bg_color)

        main_sizer = wx.BoxSizer(wx.VERTICAL)

        self.textctrl_panel = wx.Panel(self)
        self.textctrl_panel.SetBackgroundColour(self.highligt_color)

        textctrl_panel_sizer = wx.BoxSizer(wx.VERTICAL)

        self.textctrl = wx.TextCtrl(self.textctrl_panel)
        textctrl_panel_sizer.Add(self.textctrl, 0, wx.ALL, HIGHLIGHT_WIDTH)

        self.textctrl_panel.SetSizer(textctrl_panel_sizer)
        self.textctrl_panel.Layout()
        textctrl_panel_sizer.Fit(self.textctrl_panel)
        main_sizer.Add(self.textctrl_panel, 0, wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.SetSizer(main_sizer)
        self.Layout()

        self.Centre(wx.BOTH)

        self.textctrl.Bind(wx.EVT_TEXT, self.on_text)

        # to reduce flickering
        self.SetDoubleBuffered(True)
        self.CenterOnScreen(wx.BOTH)
        self.Show()

    def on_text(self, event):
        """ triggered every time the text ctrl text is updated, schedules validate_text() to run after the event """
        event.Skip()
        wx.CallAfter(self.validate_text)

    def validate_text(self):
        """ sets the textctrl panel background color to give the appearance
        of a red highlight if there is no text in the text ctrl """
        color = self.bg_color if self.textctrl.GetValue() else self.highligt_color
        self.textctrl_panel.SetBackgroundColour(color)
        # force the window to repaint
        self.textctrl_panel.Refresh()


try:

    app = wx.App()
    frame = Mainframe()
    app.MainLoop()
except:
    input(traceback.format_exc())
+0
2019-09-18 02:06:51

Посмотрите другие вопросы по меткам