문제

내가 찾는 가장 기본적인 방법에 대한 설명을 그리는 텍스트 내에서 JPanel.내가 알고 있는 억 튜토리얼이 있지만 아무도 그들의 클릭하면 나와 함께 몇 가지 특정 질문에 도움이 될 수 있는 사람이 있습니다.로 설정(a 테스트 응용 프로그램)내가 하나의 클래스가 있는 JLabel,a JTextField,a JButton 및 JPanel.응용 프로그램에서 읽기 수에서 외부 파일을 표시해야 그들의 평균 패널에서 때 JButton 입니다.나는 모든 기본 프로그램을 정리(즉,버튼의 반응과 인쇄 평균하는 명령줄)하지만 나는 그냥 수 없을 정렬 인쇄하는 방법을 평균하여 패널이 있습니다.나는 나의 가장 큰 문제는 어떻게 통합 페인트()또는 paintComponet()메소드와 함께 나머지 부분의 코드입니다.해야 그것은 그것의 자신의 클래스?해야 JPanel 다 그것의 자신의 클래스?그것처럼 보인다는 것이 무엇 대부분의 튜토리얼은 말하고,나는 그냥 무엇인지 확실하지 않는 첫 번째 단계입니다.이 코드는 다음과 같:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;  

public class Main extends JFrame implements ActionListener {
  private int[] intArray = new int[10000];
  private int numOfInts = 0;
  private int avg = 0;

  protected JButton avgBtn;
  protected JTextField indexEntry;
  protected JLabel instructions;
  protected JPanel resultsPanel;

  public Main(){

    //create main frame
    this.setTitle("Section V, question 2");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(350, 250);
    this.setLayout(new GridLayout(4, 1));

    //create instruction label and add to frame
    instructions = new JLabel("Follow the instructions on the exam to use this program");
    this.add(instructions);

    //create textfield for index entry and add to frame
    indexEntry = new JTextField();
    this.add(indexEntry);

    //create button for average and add to frame
    avgBtn = new JButton("Click for Average");
    this.add(avgBtn);
    avgBtn.addActionListener(this);

    //create panel to display results and add to frame
    resultsPanel = new JPanel();
    resultsPanel.setBackground(Color.BLUE);
    this.add(resultsPanel);

    //read in from file
    readFromFile();

    //compute average
    computeAverage();
  }

  private void readFromFile() {
    try {
            // Open the file
            FileInputStream fstream = new FileInputStream("numbers.dat");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

            //create placeholder for read in ints
            String strLine;

            //Read File Line By Line
            int i = 0;
            while ((strLine = br.readLine()) != null) {
              //place ints in array and increament the count of ints
              System.out.println (strLine);
              intArray[i] = Integer.parseInt(strLine);
              numOfInts++;
              i++;
            }
            //Close the input stream
            in.close();
            System.out.println ("numOfInts = " + numOfInts);
    }
    catch (Exception e) {
            //Catch exception if any
            System.err.println("Error: " + e.getMessage());
    }
  }

  //compute averaage
  private void computeAverage() {
    int sum = 0;
    for (int i = 0; i < numOfInts; i++)
    sum += intArray[i];
    avg = sum/numOfInts;
    System.out.println("avg = " + avg);
  }

//event handling
public void actionPerformed(ActionEvent e) {
    if(e.getSource() == avgBtn) {
            computeAverage();
    }
}

//"main" function
public static void main(String[] args) {
    Main m = new Main();
    m.setVisible(true);
}

//paint
public void paintComponent(Graphics g){
  g.drawString(avg, 75, 75);
}
}

모든 도움/방향으로 감사드립니다.내가 사용했던 이 코드는 최근 대한 다른 질문에 나는 단지 그것을 알고 싶다!관광 패널을 표시의 평균을 읽을 수을 때 버튼을 클릭하고 표시하이 무엇으로 들어 textfeild 때 초점이었다 그것을 입력 누르고 있었지만,나는 아기를,그리고 내가 말했듯이 나 같은이 스레드에 대한 일반적인 튜토리얼에 대한 다른 사람과 비슷한 질문지 않은 태양에서 답을 찾는 문서 또는 다른 곳입니다.사전에 너무 감사합니다.Dan:)

도움이 되었습니까?

해결책

메인 클래스 내에서 jpanel을 확장하는 내부 클래스를 만듭니다.

class MyPanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString(Integer.toString(avg), 75, 75);
    }

}

그런 다음 ActionPerformed에서 computeaverage ()를 호출 한 후 해당 패널에서 Repaint를 호출해야합니다.

//event handling
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == avgBtn) {
        computeAverage();
        panel.repaint();
    }
}

다른 팁

jlabel을 jpanel에 추가하십시오.

jlabel에서 settext (string)를 호출하면 텍스트가 jpanel 내에 그려집니다.

1)JFrame 없 paintComponent()메소드를 그 코드를 게재하지 않습니다.을 만들 필요가 있는 사용자 지정 JPanel 과 재정의 paintComponent()방법을 사용자 정의 그림입니다.

2)경우에도 당신은 위의 그림이 여전히 표시되지 않기 때문에 패널에 의 기본값이 제로 크기입니다.그래서 당신은 다음을 설정해야 원하는 패널의 크기를 확인해 볼 수 있습니다.

3)왜 당신도 이렇게 합니다.당신이해야 할 모든 당신이 사용하 JLabel 고 설정 텍스트의 JLabel.

나는 그것을 찾을 믿기 힘들을 보면서 다른 있습니다.스윙에 대한 튜토리얼 사용자 지정화 20 선하는 프로그램이 기본적인 방법을 보여 줍니다.

나는 당신이 JFrame을 서브 클래싱해서는 안된다고 생각합니다. JFrame의 인스턴스를 인스턴스로 만드십시오
메인 클래스의 변수 및 jpanel 등을 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top