ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen.

yachty66

Mitglied
Ich möchte mir ein GUI ausgeben lassen. Dafür habe ich mehrere Klassen. Eine Klasse ImagePanel bei der - je nach dem welche Eingabe sich die Anzeige verändert. (Die jeweiligen Funktionen sind nicht weiter relevant, daher sind sie nicht zu beachten)

[CODE lang="java" title="ImagePanel"]public class ImagePanel extends JPanel {
private BufferedImage img;
List isBorEna = new ArrayList();
List getConCoo = new ArrayList();
List getRa = new ArrayList();
List getTesCoo = new ArrayList();
JPanel borderPanel = new JPanel();
BorderLayout panelLayout = new BorderLayout();
public ImagePanel() {
//JPanel borderPanel = new JPanel();
borderPanel.setLayout(panelLayout);

//borderPanel.add(new JButton("PAGE_START"), BorderLayout.PAGE_START);
//borderPanel.add(new JButton("PAGE_END"), BorderLayout.PAGE_END);
borderPanel.setSize(31, 78);
//add(borderPanel, c);
}

public void setImage(LFAImage image) throws IOException {
//image.getImage();
borderPanel.createImage((ImageProducer) image.getImage());
}

public LFAImage getImage() {
return getImage();
}

public void setConfig(Configuration config) {
isBorEna.add(config.isBorderEnabled());
getConCoo.add(config.getControlCoordinates());
getRa.add(config.getRatio());
getTesCoo.add(config.getTestCoordinates());
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
List<Component> componentList = Arrays.asList(borderPanel.getComponents());
if (componentList.isEmpty()) {
JLabel jlabel = new JLabel("N/A");
borderPanel.add(jlabel);
borderPanel.setBackground(Color.white);
} else if(componentList.isEmpty() == false && !componentList.contains(getImage())){
borderPanel.setBackground(Color.white);
g.setColor(Color.BLUE);
g.drawRect((Integer) getConCoo.get(1), (Integer) getConCoo.get(2), (Integer) (getConCoo.get(3))- (Integer) (getConCoo.get(1)), (Integer)(getConCoo.get(4))-(Integer)(getConCoo.get(2)));

}
}
}[/CODE]

In meiner MainFrame Klasse soll dann das gesamte GUI mit dem ImagePanel ausgegeben werden. Ich weiß bloß nicht, wie ich das ImagePanel mit den verschiedenen Methoden in MainFrame einfügen soll.

[CODE lang="java" title="MainFrame"]public class MainFrame extends JFrame {
private JLabel mutationFileLabel = new JLabel("Please load a mutation CSV file");
private JLabel sequenceFileLabel = new JLabel("Please load a patient FASTA/FASTQ file");
private JLabel referenceFileLabel = new JLabel("Please load a reference FASTA/FASTQ file");
private JLabel recommendedDrug = new JLabel("Recommended drug:");
private JLabel predictedResistanceDrug = new JLabel("Predicted resistance for recommended drug:");
private JLabel resultRecommendedDrug = new JLabel("N/A");
private JLabel resultPredictedRecommendedDrug = new JLabel("N/A");
private ImageIcon loadIcon = new ImageIcon("resources/folder_explore.png");
private JButton loadMutationFileButton = new JButton(loadIcon);
private JButton loadReferenceFileButton = new JButton(loadIcon);
private JButton loadSequenceFileButton = new JButton(loadIcon);
private JButton calculationButton = new JButton("Predict best drug");
private String mut;
private String ref;
private String seq;

ImagePanel panel = new ImagePanel();

protected abstract class LoadListener extends Component implements ActionListener {
String extensionDescription;
String[] extensions;
public LoadListener(String extensionDescription, String... extensions) {
this.extensionDescription = extensionDescription;
this.extensions = extensions;
}

@Override
public void actionPerformed(ActionEvent actionEvent) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setDialogTitle(extensionDescription);
jfc.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(extensionDescription, extensions);
jfc.addChoosableFileFilter(filter);
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
setData(jfc.getSelectedFile());
jfc.getSelectedFile().getAbsolutePath();
}
}

protected abstract void setData(File file);
}

public MainFrame() {
super("HIV Diagnostics Tool");
setSize(400, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout d = new BorderLayout();
panel.add(BorderLayout.CENTER);
init();
pack();
setVisible(true);
}

private void init() {
initMenuBar();
initFileChoosers();
changeLabels();
//calculate();
}

private void changeLabels(){
loadMutationFileButton.addActionListener(new LoadListener("file", "csv") {
@Override
protected void setData(File file) {
mutationFileLabel.setText(file.getName());
mutationFileLabel.setForeground(Color.black);
mut = file.getPath();
}
});

loadReferenceFileButton.addActionListener(new LoadListener("file", "FASTA", "FASTQ") {
@Override
protected void setData(File file) {
referenceFileLabel.setText(file.getName());
referenceFileLabel.setForeground(Color.black);
ref = file.getPath();
}
});

loadSequenceFileButton.addActionListener(new LoadListener("file", "FASTA","FASTQ") {
@Override
protected void setData(File file) {
sequenceFileLabel.setText(file.getName());
sequenceFileLabel.setForeground(Color.black);
seq = file.getPath();
if((sequenceFileLabel.getForeground() == Color.black && referenceFileLabel.getForeground() == Color.black && mutationFileLabel.getForeground() == Color.black) == true){
calculationButton.setEnabled(true);
}
}
});
}

/*private void calculate(){
calculationButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
try {
SequenceAnalysisManager.performAnalysis(ref, seq, mut);
resultRecommendedDrug.setText(SequenceAnalysisManager.performAnalysis(ref, seq, mut).getBestDrug());
resultRecommendedDrug.setForeground(Color.black);
resultPredictedRecommendedDrug.setText(String.valueOf(SequenceAnalysisManager.performAnalysis(ref, seq, mut).getBestDrugResistance()));
resultPredictedRecommendedDrug.setForeground(Color.black);

} catch (NoValidReadersException e) {
JOptionPane.showMessageDialog(getOwner(), e.getMessage(),
"Unsupported file format", JOptionPane.INFORMATION_MESSAGE);
} catch (FileFormatException e) {
JOptionPane.showMessageDialog(getOwner(),
e.getMessage(), "Error parsing file", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(getOwner(), e.getMessage(),
"IOException -> Error loading file",JOptionPane.INFORMATION_MESSAGE);
}
}
});
}*/

private void initMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem loadConfiguration = new JMenuItem("Load configuration");
loadConfiguration.addActionListener(new LoadListener("file", "txt") {
@Override
public void setData(File file) {
file.getPath();
//panel.setImage();

}
});

JMenuItem LoadLFAImage = new JMenuItem("Load LFA image");
LoadLFAImage.addActionListener(new LoadListener("file", "png") {
@Override
public void setData(File file) {
file.getPath();
}
});

JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
System.exit(0);
}
});
fileMenu.add(loadConfiguration);
fileMenu.add(LoadLFAImage);
fileMenu.add(exit);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
}

private void addLoaders(JLabel label, JButton button, GridBagConstraints c/*, ActionListener listener*/) {
c.weightx = 5;
c.anchor = GridBagConstraints.WEST;
add(label, c);
c.gridx++;
c.weightx = 1;
c.anchor = GridBagConstraints.EAST;
add(button, c);
}

private void initFileChoosers() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(0, 5, 0, 5);
mutationFileLabel.setForeground(Color.red);
c.gridx = 0;
c.gridy = 0;
addLoaders(mutationFileLabel, loadMutationFileButton, c);
referenceFileLabel.setForeground(Color.red);
c.gridx = 0;
c.gridy ++;
addLoaders(referenceFileLabel, loadReferenceFileButton, c);
c.gridx = 0;
c.gridy ++;
addLoaders(sequenceFileLabel, loadSequenceFileButton, c);
sequenceFileLabel.setForeground(Color.red);
c.gridx = 0;
c.gridy ++;
c.gridwidth = 2;
calculationButton.setEnabled(false);
add(calculationButton, c);
c.gridx = 0;
c.gridy++;
c.anchor = GridBagConstraints.CENTER;
add(recommendedDrug, c);
c.gridx = 0;
c.anchor = GridBagConstraints.EAST;
resultRecommendedDrug.setForeground(Color.red);
add(resultRecommendedDrug, c);
c.gridx = 0;
c.gridy++;
c.anchor = GridBagConstraints.WEST;
add(predictedResistanceDrug, c);
c.gridx = 0;
c.anchor = GridBagConstraints.EAST;
resultPredictedRecommendedDrug.setForeground(Color.red);
add(resultPredictedRecommendedDrug, c);
}

public static void main(String[] args) {
MainFrame gui = new MainFrame();
gui.setVisible(true);
}

}[/CODE]
 
Ich weiß bloß nicht, wie ich das ImagePanel mit den verschiedenen Methoden in MainFrame einfügen soll.
Verstehe jetzt das Problem nicht wirklich. Dein ImagePanel ist ein JPanel, also eine Swing-Komponente. Die kannst Du genauso wie alle anderen auch verwenden. Das Hinzufügen zum MainFrame funktioniert also nicht anders wie bei JLabel auch. Oder soll das ImagePanel als Contaner für die anderen Komponenten dienen? Dann müsstest Du halt panel.add(....) aufrufen. Alternativ könntest Du auch setContentPane(panel) verwenden.

Aber: ich rate hier nur ins Blaue hinein. Man müsste wissen, was genau Du tun möchtest.
 

Zurück
Oben