0
package com.spiralfive.inventory;

import java.awt.Font;
import java.awt.Panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.BorderLayout;

import javax.swing.JApplet;
import javax.swing.JButton;

public class MainFile extends JApplet implements MouseListener {

// Declare the initial components
private JButton btnNewInventory;
private JButton btnMarkDown;
private JButton btnProcessSales;
private JButton btnActive;
private JButton btnStats;
private Panel mainPanel;
private Panel menuPanel;
private Panel inventoryPanel;
private Panel setactivePanel;

// Call the Initializer...
public void init() {
    initComponents();
}

// Initialize the Main Components - Mostly Menu Items
private void initComponents() {

    // Main Form Components
    mainPanel = new Panel();
    menuPanel = new Panel();
    inventoryPanel = new Panel();
    setactivePanel = new Panel();
    btnNewInventory = new JButton("New Inventory");
    btnActive = new JButton("Set Active");
    btnMarkDown = new JButton("Mark Down");
    btnProcessSales = new JButton("Process Sale");
    btnStats = new JButton("Statistics");

    // Enable Mouse Interactivity
    btnNewInventory.addMouseListener(this);
    btnMarkDown.addMouseListener(this);
    btnProcessSales.addMouseListener(this);
    btnActive.addMouseListener(this);
    btnStats.addMouseListener(this);

    // Set the Fonts
    Font buttonFont = new Font("Arial", Font.PLAIN, 20);

    // Apply Fonts To Menu
    btnNewInventory.setFont(buttonFont);
    btnMarkDown.setFont(buttonFont);
    btnProcessSales.setFont(buttonFont);
    btnActive.setFont(buttonFont);
    btnStats.setFont(buttonFont);

    // Set Panel Layout For Menu Items
    menuPanel.setLayout(new java.awt.GridLayout(1,6));

    // Add the Components
    menuPanel.add(btnNewInventory);
    menuPanel.add(btnActive);
    menuPanel.add(btnMarkDown);
    menuPanel.add(btnProcessSales);
    menuPanel.add(btnStats);

    // Add The Menu To the Main Panel
    mainPanel.add(BorderLayout.NORTH, menuPanel);

    // Make Inventory Load by Default
    createPanels();
    makeInvVisible();

    // Set It All Visible
    add(mainPanel);

}

// Create the Panels Used in this applet
public void createPanels() {
    NewInventory inventoryPanel = new NewInventory();
    inventoryPanel.setLayout(new java.awt.GridLayout(6,2));
    mainPanel.add(BorderLayout.CENTER, inventoryPanel);

    SetActive setactivePanel = new SetActive();
    setactivePanel.setLayout(new java.awt.GridLayout(6,2));
    mainPanel.add(BorderLayout.CENTER, setactivePanel);

}

public void makeInvVisible() {
    inventoryPanel.setVisible(true);
    mainPanel.repaint();
}

public void makeInvDisappear() {
    inventoryPanel.setVisible(false);
    mainPanel.repaint();
}

public void makeActiveVisible() {
    setactivePanel.setVisible(true);
    mainPanel.repaint();
}

public void makeActiveDisppear() {
    setactivePanel.setVisible(false);
    mainPanel.repaint();
}

public void mouseClicked(MouseEvent e) {

    // Determine Which Button Has Been Clicked
    JButton currentButton = (JButton)e.getComponent();

    // New Inventory Button
    if(currentButton == btnNewInventory) {
        makeInvVisible();
        makeActiveDisppear();
    }

    // Set Active Button
    else if(currentButton == btnActive) {
        makeActiveVisible();
        makeInvDisappear();
    }
}

public void mousePressed(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

}

上記のコードを使用して、setVisible を使用してボタンをクリックすると、新しい Panel() を表示し、既存のパネルを非表示にしようとしています。ただし、 Panel() を変更することはできません。現在のパネルでは setVisible を false に、要求されたパネルでは true に変更するように設定されているボタンをクリックしても何も起こりません。

パネルが別のクラス(initComponents)でプライベートに設定されているためだと確信しています。パネルの setVisible プロパティにアクセスするにはどうすればよいですか? それとも、これが悪いのですか?

4

1 に答える 1

1

追加

this.validate();

makeActiveVisible() メソッドで。

Swing コンポーネントはデフォルトで無効な状態であり、(コンポーネント自体または親コンテナーのいずれかで .validate() メソッドを呼び出すことによって) 検証されない限り、画面に描画されません。

こちらもご覧ください

Java の repaint()

于 2013-08-03T22:50:11.120 に答える