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]
[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]