How to make JTextArea blocks with height relative to content length, but with constant width?
I am trying to put JLabel and JTextArea into JPanel. There are few requirements for this JTextArea:
1. JTextArea must have constant width (approximately 680px).
2. Height must be relative to content. Content can be different.
JPanel compilationErrorInfoPanel = new JPanel();
compilationErrorInfoPanel.setBackground(this.getBackground().darker());
compilationErrorInfoPanel.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, this.getBackground()));
JTextArea jTextArea = new JTextArea(errorInfo);
jTextArea.setEditable(false);
jTextArea.setLineWrap(true);
jTextArea.setWrapStyleWord(true);
jTextArea.setBackground(compilationErrorInfoPanel.getBackground());
jTextArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 14));
jTextArea.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, jTextArea.getBackground()));
FontMetrics metrics = getFontMetrics(jTextArea.getFont());
int columnWidth = metrics.charWidth('m');
jTextArea.setColumns(680/columnWidth);
JLabel errorLabel = new JLabel(new ImageIcon(getClass().getResource(Configuration.getProperties().getString("jresource.icon"))));
compilationErrorInfoPanel.add(errorLabel);
compilationErrorInfoPanel.add(jTextArea);
compilationErrorInfoPanel.setPreferredSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMaximumSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMinimumSize(compilationErrorInfoPanel.getPreferredSize());
The problem i faced:
if any content line longer than area width, JTextArea will creep out of JPanel.
I am using BoxLayout.
Is their any solution?
java swing
add a comment |
I am trying to put JLabel and JTextArea into JPanel. There are few requirements for this JTextArea:
1. JTextArea must have constant width (approximately 680px).
2. Height must be relative to content. Content can be different.
JPanel compilationErrorInfoPanel = new JPanel();
compilationErrorInfoPanel.setBackground(this.getBackground().darker());
compilationErrorInfoPanel.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, this.getBackground()));
JTextArea jTextArea = new JTextArea(errorInfo);
jTextArea.setEditable(false);
jTextArea.setLineWrap(true);
jTextArea.setWrapStyleWord(true);
jTextArea.setBackground(compilationErrorInfoPanel.getBackground());
jTextArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 14));
jTextArea.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, jTextArea.getBackground()));
FontMetrics metrics = getFontMetrics(jTextArea.getFont());
int columnWidth = metrics.charWidth('m');
jTextArea.setColumns(680/columnWidth);
JLabel errorLabel = new JLabel(new ImageIcon(getClass().getResource(Configuration.getProperties().getString("jresource.icon"))));
compilationErrorInfoPanel.add(errorLabel);
compilationErrorInfoPanel.add(jTextArea);
compilationErrorInfoPanel.setPreferredSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMaximumSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMinimumSize(compilationErrorInfoPanel.getPreferredSize());
The problem i faced:
if any content line longer than area width, JTextArea will creep out of JPanel.
I am using BoxLayout.
Is their any solution?
java swing
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.
– camickr
Jan 2 at 15:14
add a comment |
I am trying to put JLabel and JTextArea into JPanel. There are few requirements for this JTextArea:
1. JTextArea must have constant width (approximately 680px).
2. Height must be relative to content. Content can be different.
JPanel compilationErrorInfoPanel = new JPanel();
compilationErrorInfoPanel.setBackground(this.getBackground().darker());
compilationErrorInfoPanel.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, this.getBackground()));
JTextArea jTextArea = new JTextArea(errorInfo);
jTextArea.setEditable(false);
jTextArea.setLineWrap(true);
jTextArea.setWrapStyleWord(true);
jTextArea.setBackground(compilationErrorInfoPanel.getBackground());
jTextArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 14));
jTextArea.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, jTextArea.getBackground()));
FontMetrics metrics = getFontMetrics(jTextArea.getFont());
int columnWidth = metrics.charWidth('m');
jTextArea.setColumns(680/columnWidth);
JLabel errorLabel = new JLabel(new ImageIcon(getClass().getResource(Configuration.getProperties().getString("jresource.icon"))));
compilationErrorInfoPanel.add(errorLabel);
compilationErrorInfoPanel.add(jTextArea);
compilationErrorInfoPanel.setPreferredSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMaximumSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMinimumSize(compilationErrorInfoPanel.getPreferredSize());
The problem i faced:
if any content line longer than area width, JTextArea will creep out of JPanel.
I am using BoxLayout.
Is their any solution?
java swing
I am trying to put JLabel and JTextArea into JPanel. There are few requirements for this JTextArea:
1. JTextArea must have constant width (approximately 680px).
2. Height must be relative to content. Content can be different.
JPanel compilationErrorInfoPanel = new JPanel();
compilationErrorInfoPanel.setBackground(this.getBackground().darker());
compilationErrorInfoPanel.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, this.getBackground()));
JTextArea jTextArea = new JTextArea(errorInfo);
jTextArea.setEditable(false);
jTextArea.setLineWrap(true);
jTextArea.setWrapStyleWord(true);
jTextArea.setBackground(compilationErrorInfoPanel.getBackground());
jTextArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 14));
jTextArea.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, jTextArea.getBackground()));
FontMetrics metrics = getFontMetrics(jTextArea.getFont());
int columnWidth = metrics.charWidth('m');
jTextArea.setColumns(680/columnWidth);
JLabel errorLabel = new JLabel(new ImageIcon(getClass().getResource(Configuration.getProperties().getString("jresource.icon"))));
compilationErrorInfoPanel.add(errorLabel);
compilationErrorInfoPanel.add(jTextArea);
compilationErrorInfoPanel.setPreferredSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMaximumSize(compilationErrorInfoPanel.getPreferredSize());
compilationErrorInfoPanel.setMinimumSize(compilationErrorInfoPanel.getPreferredSize());
The problem i faced:
if any content line longer than area width, JTextArea will creep out of JPanel.
I am using BoxLayout.
Is their any solution?
java swing
java swing
edited Jan 2 at 15:18
A. Kashnikov
asked Jan 2 at 14:52
A. KashnikovA. Kashnikov
338
338
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.
– camickr
Jan 2 at 15:14
add a comment |
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.
– camickr
Jan 2 at 15:14
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.– camickr
Jan 2 at 15:14
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.– camickr
Jan 2 at 15:14
add a comment |
1 Answer
1
active
oldest
votes
Solved with checking real lines amount.
String lines = content.split("n");
int linesCount = 0;
for (int i = 0; i < lines.length; i++) {
linesCount++;
linesCount += metrics.stringWidth(lines[i]) / (jTextArea.getColumns() * columnWidth);
}
jTextArea.setRows(linesCount);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54008444%2fhow-to-make-jtextarea-blocks-with-height-relative-to-content-length-but-with-co%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Solved with checking real lines amount.
String lines = content.split("n");
int linesCount = 0;
for (int i = 0; i < lines.length; i++) {
linesCount++;
linesCount += metrics.stringWidth(lines[i]) / (jTextArea.getColumns() * columnWidth);
}
jTextArea.setRows(linesCount);
add a comment |
Solved with checking real lines amount.
String lines = content.split("n");
int linesCount = 0;
for (int i = 0; i < lines.length; i++) {
linesCount++;
linesCount += metrics.stringWidth(lines[i]) / (jTextArea.getColumns() * columnWidth);
}
jTextArea.setRows(linesCount);
add a comment |
Solved with checking real lines amount.
String lines = content.split("n");
int linesCount = 0;
for (int i = 0; i < lines.length; i++) {
linesCount++;
linesCount += metrics.stringWidth(lines[i]) / (jTextArea.getColumns() * columnWidth);
}
jTextArea.setRows(linesCount);
Solved with checking real lines amount.
String lines = content.split("n");
int linesCount = 0;
for (int i = 0; i < lines.length; i++) {
linesCount++;
linesCount += metrics.stringWidth(lines[i]) / (jTextArea.getColumns() * columnWidth);
}
jTextArea.setRows(linesCount);
answered Jan 2 at 16:15
A. KashnikovA. Kashnikov
338
338
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54008444%2fhow-to-make-jtextarea-blocks-with-height-relative-to-content-length-but-with-co%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Have you tried to set a maximum size for the JTextArea? It should honor that value.
– DudeDoesThings
Jan 2 at 15:08
JTextArea will creep out of JPanel. Is their any solution?
- This could be because of the layout manager used. The FlowLayout which will display all components in a single row. If there is no space for the component it will wrap to the next row, which may cause the component to be hidden. Post a proper Minimal, Complete, and Verifiable example that demonstrates the problem.– camickr
Jan 2 at 15:14